home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network PC
/
Network PC.iso
/
installations
/
amiga emulator
/
_setup.1
/
ChangeLog
next >
Wrap
Text File
|
1997-06-12
|
95KB
|
1,527 lines
970608 Fix ncurses.c so that it links. Fix configure so that it can be enabled
Get rid of spixstate by implementing a new sprite drawing method.
970607 do_copper_cheat(): New function, Implement inaccurate, line-based
copper as an option (-C). calc_copcomp_true(): Fix possible hr 4 plane
bug (split the wait into several pieces in this mode).
Allow 0 bytes for fast and bogomem (to override .uaerc)
970606 Fix some bugs in transdisk, and make it compile with SAS C (Joanne Dow)
Stupid compilation fixes: Get rid of "==" in shell scripts, check that
B300 and friends are defined in serial.c before using them.
Implement blitter prefetch. Fix silly type in main.c that prevented
immediate blits.
init_ham_decoding(): new function, handles case where the first few
pixels of a HAM display are outside the window.
970605 disk.c: Get rid of need_read. Save cylinder/track number for the data
in the MFM buffer for each drive. Force rereads on disk insert and
write operations. In drive_fill_bigbuf(), do nothing if saved data
matches current. Fix disk change logic: give the program time to read
the change bit a couple of times before inserting a new disk.
custom.c: Fix really subtle bug: when deciding a line as border,
plfstrt/plflinelen were not set up properly, which could confuse
post_decide_line(), and eventually there would be lines decided as
playfield with plfstrt == 0, plflinelen == -32 ==> Bang. A related
bug was that setting DDFSTRT to 0 would result in both plfstrt and
plfstop having value 0.
gfxutil.c: Fix bug that could cause color values to go out of bounds.
xwin.c, svga.c: When dithering, color values were not doubled properly.
970604 filesys.c: when deleting an a_ino, remove it from hash table (Mathias
Ortmann). In do_find(), if creating a file failed and we didn't have
an a_ino before, call delete_aino on the one we created.
More configure changes: Add $X_PRE_LIBS and $X_EXTRA_LIBS in some
places. See if MIT-SHM support for X will compile and link. Always
compile it in if it will. Turn DONT_WANT_SHM and LOW_BANDWIDTH into
run-time options (-T, -L). Use single line buffer when dithering and
in low-bandwidth mode (but in all cases there's a full buffer for the
X image).
memory.c: Don't map in custom regs at 0x200000 if chipmem_size > 2MB.
Split up init_sound(): new function setup_sound(). Make "-B" accept
minimum and maximum values as in Gustavo's latest patch. Add code to
tui.c to support changing buffer size, number of bits and frequency.
970603 If using compiler, define NO_EXCEPTION_3 and NO_PREFETCH_BUFFER.
(bugreport by Raphael Poss).
GGI support from Christian Schmitt/Stefan Reinauer. More serial patches
from Stefan. 3 button joystick patch from Mathias.
Add linemem field to gfxvidinfo, for systems that don't want to keep
a buffer of the full screen. Adjust custom.c to use it instead of
bufmem if it's not NULL (mostly by Mathias). svga.c, xwin.c: Use single
line buffer in some cases. xwin.c: If USE_DGA_EXTENSION, undef
LOW_BANDWIDTH. Move test of DONT_WANT_SHM after inclusion of config.h
Make configure.in a bit more structured.
Move colormodes array to main.c.
970602 gfxlib.c: Start implementing layers workalike.
md-i386-gcc/support.c: Don't mix sleep and alarm. (Petter Schau)
970601 Remove may_run_compiled. Print error and abort if m68k_go is called
twice.
Fix yesterdays bugfix in svga.c.
Change FRAME_RATE_HACK so it tries to average the times a bit.
Re-implement a call_m68k function in autoconf.c. The new version
works by doing some heavy setjmp/longjmp magic and switching stacks.
With this, it's even possible to call things that Wait(), so use
the new functionality in gfxlib.c to call LockLayer() in WritePixel().
970531 Turn some inline functions in memory.h into macros. Get rid of
get_along and get_aword. Implement CIA A OVL bit.
main.c: Add missing close_sound() call.
Remove INTEL_FLAG_OPT, use X86_ASSEMBLY for everything.
tui.c/svgancui.c: Implement scrollable menus. Add code to select
video mode from a given list. Add "graphics_setup" call to graphics
specific files. Use it in svga.c to build a video mode menu.
Fix bug in svga.c that would crash non-linear modes.
disk.c needs to include gensound.h and sounddep/sound.h.
Fix bug in fuzzy_memset. In pfield_init_linetoscr, always adjust ddf
values if lores hack is being used.
970530 Apply some patches by Samuel Devulder.
970529 filesys.c: In "Houston, we have a problem" case, do not only delete
the oldest ExKey, but also use it instead of random memory for the
new one. Attempt to reduce the number of lost exkeys by allocating
them in action_examine_next instead of action_examine_object.
Initialize the "uniq" field of unit->rootnode.
Attempt to speed up sprite drawing loop.
Implement sprite<->sprite collisions.
Get rid of -Wtraditional.
970524 New config option NO_PREFETCH_BUFFER. Emulate 16 byte prefetch if
unset.
For exception 3, the stack frame seems to be:
(saved SR).w, (faulting address).l, (faulting instruction).w, 0.w,
(pc at fault time).l. Make everything that could generate this fault
handle it properly. That got Cybernoid II working!
970523 Makefile.in: Make sure $(DEBUGFLAGS) is used for CPU emulation files.
memory.c: Don't map chipmem at 0x200000, use custom chip bank for now.
970507 configure.in: Mutate ac_cv_c_inline=no to ac_cv_c_inline=
Check for tcgetattr, <sys/termios.h>, cfmakeraw, <sys/ioctl.h>
Check for sem_init in -lposix4 (Marc Zimmermann)
serial.c, cia.c, cia.h, serial.c: changes (Stefan Reinauer)
Make disk gap 360 (Michael Krause)
970404 In configure, check for features.h before including it in test program.
970401 New option -4. Bugreport by Mirko Viviani.
970324 Petter Schau says the exception frame for Bus Error and Address Error
is 14 bytes, not 6, on the 68000. Change Exception() accordingly.
It's *** OUCH *** day! Make hardfile beginio return the correct value.
Also load execbase before calling ReplyMsg().
It's *** OUCH *** day again! The filesystem asm code was an odd number
of bytes, leaving the hardfile code unaligned.
970318 custom.c: Rename spron to sprst, and use new variable spron to indicate
for which sprites the sprite pointer registers have been written. Don't
do sprite DMA if spron==0. (The problem was that some programs write
SPRxCTL and then SPRxPT, which used to set the sprite state to
SPR_restart, but it must be SPR_waiting_start.)
Turn a few m68k_reset()s into uae_reset()s.
New variable nr_joysticks. Delete joystickpresent. New arg "nr" for
getjoystate() and read_joystick().
New extra keycode AK_RCTRL. Handle multiple joysticks & different key
replacements in keybuf.c/custom.c. Make tui.c handle all the settings.
970310 od-linux/joystick.c now compiles again without the joystick header.
Fix some problems in configure; also check whether [n]curses.h defines
attr_t. Keep count of warnings and errors during configuration and
print a hopefully helpful message at the end.
disk.c sanitized by Mathias Ortmann.
Change the replacement getopt around a bit.
execlib.c, timerdev.c: Files removed. This will never be compatible
enough. Also remove related code (several SPCFLAGs, etc.)
Make main.c a bit nicer by introducing additional defines for the t-*
files. Also canonicalize the .uaerc file on all systems, eliminating
lines starting with '#' in the process.
Remove code in autoconf.c to set up 8MB chip; move it to filesys.asm.
Try doing the copper end-of-line hack in copper_memory_cycles().
Disable the copper speedup hack.
970309 Add a small, dumb hash table to struct _unit to speed up repeated
aino lookups. Delete aino in action_delete_object(). Move children in
action_rename_object(). In action_examine_next(), call new function
lookup_child_aino_for_exnext() which behaves more or less like
lookup_child_aino(), except it uses new function get_aname() to
translate filenames.
More portability fixes. New links set up in configure: sounddep,
target.h. All machine-dependent and joystick code removed
from os.c, renamed to audio.c. os.h renamed to audio.h, joystick stuff
moved to joystick.h. New directory targets/.
missing.c: New file.
970308 Rewrite filesystem. Now it keeps one unique "a_inode" structure for
every object in the filesystem. This contains Amiga name, native
name, Amiga permissions, lock counts and several links for building
a tree structure. Keys are now made only for files which need a fd
and a file position.
Treat invalid locking modes als shared.
Comment out the code using readdir_r because that function appears
to be broken in glibc-2.0.1.
Clear RES2 in all packets before handling them.
Give mousehack the same task priority as the input.device.
Fix (?) some silly bugs in disk.c.
970307 Include some Acorn port code from Peter Teichmann.
Yet Another Serial Diff from Stefan.
970306 filesys.c: Don't just crash if lookup_key() has no success.
action_find_write() is supposed to create the file if it does not
exist.
970305 More DOS patches. Make the Makefile parallel-make safe.
svgancui.c: Do cyclic search if character is typed in file selector.
my_alphasort(): New function (work around glibc bug)
custom.c: Fix error in yesterdays change.
filesys.h: New file.
970304 New serial patch from Stefan and Christian.
Remove the assembler code to generate inputevents. Instead, add a new
Amiga C program ("mousehack") which does the trick. New function
mousehack_helper() in custom.c, activated by calltrap 0xF0FF70.
Mouse default is now always normal_mouse, not follow_mouse.
Do disk change checks only every 1/2 second. disk.c: Reverse
nodskchange to dskchange, and make sure there has been a step with the
drive empty before calling drive_insert() from DISK_check_change() (but
this _still_ doesn't work. Arrrghh).
970303 filesys.c: Initialize _all_ of struct _unit in startup_handler().
Remove message_lock and friends and use new variables cmds_sent,
cmds_acked and cmds_completed to determine when to send dummy messages.
Changed examinekey handling so that "dir all" on a large tree doesn't
crash anymore (it used to reuse the top-level exkeys which were still
in use after a wraparound). Don't allocate examinekeys if we're
examining files.
Check for readdir_r in configure. Use a wrapper my_readdir() around
either readdir or readdir_r.
Call filesys_reset() also from filesys_diagentry().
Get rid of most of uaelib.c. Now there isn't a library, just a calltrap
at 0xF0FF60. Changed uae_pragmas.h accordingly and recompiled uaectrl.
Added a bunch of "volatile"s in various places in filesys.c and
penguin.h.
Make the filesystem reset-safe in the threaded case (paranoia changes).
Check disk changes only every 1/10 second in vsync_handler().
Add assembler code to generate InputEvents once every vblank to
filesys.asm. (Doesn't work yet.)
970302 filesys.c: Get rid of DosPacket type, pass pointers into Amiga memory
instead. Use GET_PCK_* and PUT_PCK_* macros to access fields.
Start making filesystem code thread safe & multithreaded. Move static
variables from some functions into struct _unit, likewise the key
and exkey variables. Add code to filesys.asm to queue commands which
did not complete and to reply to them later. Do multithreading if
compiled with SUPPORT_THREADS. See source for details.
Change hardfile and uaelib code not to call 68k routines. Make emulator
traps more efficient (no need to save regs, don't need SPCFLAG_EMULTRAP
anymore).
970301 Fixed ncurses.c so it works with currprefs.
filesys_reset(): New function, called from customreset().
Changed source layout. Break up machdep into machdep, osdep and
threaddep.
penguin.h: Now supports arbitrary types in pipes.
Changed filesys.c so that no 68k code is called from native C code.
filesys.asm, filesys.sh: New files. filesys.asm contains some
startup code and the main loop for the filesystem. Several locks
are allocated by the assembler code for use by the C code.
DOS_AllocMem(), DOS_FreeMem(), make_dev(), build_parmpacket(),
filesys_init(): Functions removed.
970228 ncurses.c: Fix problem in b/w modes.
finish_drawing_frame(): Don't need to draw lines in multipenguin mode.
Move all options into new struct uae_prefs. New variables currprefs,
changed_prefs.
svgancui.c, tui_filereq(): If user presses a key, start search at
current position, not at the beginning.
DISK_check_change(): new function, compares currprefs with
changed_prefs and handles diskchanges if they differ. Called from
vsync_handler().
DISK_validate_filename(): new function, checks whether a file exists.
Modify svga.c and tui.c so that F11 now brings up a limited UI.
970227 Reimplement Mathias Ortmann's frame rate hack: New option HAVE_RDTSC
in config.h. New typedef frame_time_t. New variables vsynctime and
vsyncmintime. New function machdep_init() in md-*/support.c which
sets up vsynctime in the md-i386-gcc and md-i386-linux cases. Use
all of those in events.h, do_cycles() to determine whether to spend
more time on the CPU emulation.
Add missing "int i;" to xwin.c, init_colors().
Unroll some loops in sample_*handler().
Improve quitting/resetting behaviour: Move quit_program from GUI
specific files to main.c. New functions uae_reset() and uae_quit(),
quit_program is now handled in vsync_handler() and m68k_go().
New variable sample_evtime, used in customreset() and set up in
init_sound().
970226 Solaris sound update from Manfred Thole.
keybuf.c: Decided that it doesn't need locking after all.
Add a bunch of Gustavo's latest diffs. (I hate CR characters!)
Move gfxvidinfo from all the target-specific files to custom.c
More Win32 stuff: New function notice_new_xcolors().
970225 configure.in: In shell string comparisons, always put spaces around =
Add warning about standard SVGAlib being incompatible with
LinuxThreads.
os.c, SOLARIS_SOUND: Remove reference to obsolete variable smplcnt.
Two new variables sound8_base and sound16_base.
sysdeps.h: Split off some stuff into md-amiga/amiga-kludges.h. Also
make the main types now uae_u32 and variants instead of ULONG, etc.
Convert some files to use the new types.
cia.c: use int/long instead of ULONG/UWORD/etc for most static vars.
xdebug.c: Some cleanup.
md-i386-linux/penguin.h: Fix bug. Add "chunks" parameter to
init_comm_pipe. Use it to decide in write routine whether to signal
the other thread if it's waiting. Add no_buffer parameter to
write_comm_pipe_int.
Start adding Mathias Ortmann's Win32 patches.
md-i386-win32: New directory
include/sysconfig.h.win32: New file
custom.c: is_lastline: new variable, set in hsync_handler().
sysdeps.h: Make it possible for system specific code to say that
POSIX/ANSI stdio/malloc functions aren't present and are defined
by a system-specific file instead. In filesys.c, don't reference
errno if DONT_HAVE_POSIX is defined.
readcpu.h: Kludge around the fact that Messysoft C apparently doesn't
handle enums properly.
newcpu.c/sysdeps.h: Preprocessor magic for 64 bit constants to get
around a problem with MS C.
md-*/penguin.h: Add dummy definitions for semaphores.
keybuf.c: Use semaphores to synchronize access.
os.c, win32 sound stuff: add memcpy avoidance code.
970221 X86.S: Don't use .type ifdef USE_UNDERSCORE.
Move thread support configuration to configure from config.h. Change
pipe implementation to use POSIX semaphore functions.
970217 From Samuel Devulder: Fix off-by-one error in LINE_TO_SCR, EHB case.
970215 customreset(): Initialize current_colors.color_regs to invalid values
[reported by Samuel Devulder]. config.h: Uncomment ECS_DENISE [reported
by Mathias Ortmann]. Add ami-win.c and custom.c patch from Samuel
Devulder.
970213 disk.c: Set FLOPPY_SPEED to 3
custom.c: SPRxCTL_1(): if spron was SPR_restart set it to
SPR_waiting_start. do_sprites(): don't do that.
SPRxPT{H,L}: Call decide_line().
970210 custom.c, X86.S: Do LORES_HACK for dual playfield screens. Plug memory
leak in custom_reset(). Fix pfield_draw_line() not to do so many
multiplications. Make line_changed a char array. In remember_ctable(),
remember comparison results also if negative.
In 8 and 16 bit graphics modes, use the high parts of the color values
to duplicate the actual values. This saves a lot of code in the
hdoubling routines. Add a special fill_line in the X86_ASSEMBLY case.
Check for glibc-2 and libpthread in configure.
options.h: In fuzzy_memset(), do rounding slightly more conservative.
Add tons of new keycodes to svga.c
In record_color_change(), also check if vertically outside DIW.
New variable hdiwstate, to represent the horizontal DIW state machine
(thanks Petter!) Handled in reset_decisions(), finish_decisions() and
decide_diw().
970209 Change ncurses.c not to do so many multiplications/divisions. Add bold
character support. Add color support. Make configure recognize
--without-svgalib and enable ncurses.c in that case.
970208 X86.S, custom.c: Do LORES_HACK for EHB screens also.
New function write_log(); convert some fprintf(stderr, ...) calls.
970207 Argh, Linux/i386/ELF check in configure got broken by latest sh-utils.
In disk.c, drive_reset(), clear nodskchange flag.
970206 Sprite fix from Mathias Ortmann: _really_ get rid of SPR_vtop, and
replace all uses by SPR_stop.
970204 Disk change fix from Mathias Ortmann.
970203 New file ncurses.c, from Samuel Devulder.
Disabled Exec stuff completely. Now it isn't even compiled in anymore.
970129 Changes from Samuel Devulder for Amiga and Christian Bauer for BeBox.
970122 Reorder the set_planes_unaligned functions so that better code is
generated. Remove the or_planes_unaligned functions, add a parameter
do_or to the set_planes functions and rely on the compiler to optimize
the additional if away.
post_decide_line() can now turn DMA off early.
Make struct flag_struct 64 bits large for i386 systems, so we can use
long move insns without clobbering the X flag.
"make clean" should delete machdep/support.o.
Maybe we do need SPR_vtop after all - undo 970120 change. Instead,
comment out the code that clears the pos and ctl words at vsync time.
In xwin.c, restrict window height to 300 or 600 depending on linedbl
mode.
970121 Get rid of SPCFLAG_BLIT, call do_blitter() directly.
In finish_decisions(), don't check for sprite draws in the border.
Reimplement the SMART_UPDATE define so that the memcmpy() overhead can
be avoided by not setting it (but this usually loses).
Detect 7 lores planes in BPLCON0() and change to 6 to avoid memory
clobbers.
In pfield_draw_line(), do memcpy linedoubling after handling the line
to be doubled, not when we see a LINE_AS_PREVIOUS. Get rid of prev_ypos
parameter.
Add special code for bpldelay1 == bpldelay2 to the UNALIGNED_PROFITABLE
code.
In pfield_init_linetoscr(), when delays 1 and 2 differ, clear the areas
which are covered only by half of the planes at the start and end of
the DDF area.
Replace FASTER_CPU and LINUX_SOUND_SLOW_MACHINE with M68K_SPEED.
Replace fast_unaligned_memset macros with fuzzy_memset; use this also
in pfield_init_linetoscr().
Use real (PAL) vblank end in do_sprites().
970120 Mask out high byte in DDF{STRT,STOP}
Oops, forgot about long frames while calculating the bounds of all the
maxvpos*2-sized arrays. Increment them all by two.
Try to detect empty sprites before recording them for the drawing code,
but be careful not to hurt attached sprites.
From Paul Kienitz: hack for keyboard code in cia.c to work better with
newer Kickstarts; small cleanup in cpuopti.c.
Undo yesterday's change in copper_memory_cycles(), instead call
decide_line() each iteration and test whether copper_cycle_time == -1
to determine whether we're vertically in the DIW.
calculate_copper_cycle_time() could get astronomical plane counts due
to missing masking operation.
No need to put the copper to sleep for one memory cycle after a WAIT,
merge that with the two cycles for the next instruction.
Get rid of SPR_vtop, no longer needed (it was unnatural anyway)
970119 Implemented alternate pfield_doline functions that access the apixels
array at unaligned addresses; conditional on UNALIGNED_PROFITABLE.
Move LORES_HACK from config.h to custom.c.
Fix loop exit test for pfield_linetoscr_hdouble_asm8(). Clear the
right parts of apixels in pfield_init_linetoscr() when LORES_HACK is
enabled.
Get rid of bordercol array: the decision-making code should handle
lines in the border correctly by setting line_changed.
Disable bitplane DMA if more than 4 hires bitplanes are set in BPLCON0.
Fix some more copper timing inaccuracies: used to test
thisline_decision.which without calling decide_line() before.
970118 Now remember BPLCON1 changes during data fetch. New functions
decide_delay(), pfield_adjust_delay(); new fields in struct drawinfo
and new variables next_delay_change, delay_changes.
Forgot to set copstate to COP_morewait in one case in do_copper().
Add a kludge that checks for copper position 0xDC and changes it to
0xDE.
Restore equality test for vertical sprite positions. Disable sprite
DMA before the end of the vertical blank area.
Mask not only the positions, but also comparison values in
calc_copcomp_true().
970117 Change custom_bput to put the byte value in each half of the word that
is put.
970116 disk.c: Set the gap between sector 11 and 0 to 380 words. Andromeda's
"Seven Seas" demo expects at least 320. Make the KILLEHB bit
conditional on AGA_CHIPSET. Decide BPLCON1 (scrolling delays) in
decide_diw(). Fix off-by-one errors in the very_broken_program case
of decide_plane(). Fix aspect calculation when horizontal resolutions
differ. Simplify copper horizontal comparison logic slightly.
Fix divide by zero errors when reading from empty floppies.
970115 pfield_draw_line(): Check for frame_redraw_necessary also for border
lines. New global variable pfield_last_drawn_line, used to implement
clever Y centering. Make the KILLEHB test conditional on ECS_AGNUS.
Move joystick and sound initialization before gui startup. Adapt tui.c
so it understands the gfx_requested_* options.
We can't always avoid clearing pixdata.apixels if DIW is larger than
DDF. There may be sprites in the area outside DDF, but inside the DIW,
so we can't just adjust linetoscr_diw_{start,end} blindly in
pfield_init_linetoscr() [Sanity Arte demo].
970114 Bebox diffs from Christian Bauer.
Support for Symmetric Multi Penguins under Linux (start second thread
with clone and use some pipes for communication - rather simpleminded
for now). Rework do_flush_line() and do_flush_screen() so that X
libraries are only called from the first thread.
Eliminate valid field from struct decision (set which to -2 instead of
valid = 0)
Fix definition for gui_filename() in xdebug.c to use const char * for
the second parameter. Remove CRs from disk.c (now how did they get in
there??). Likewise for cpuopti.c.
970113 When post_decide_line() detects mid-line DDF change, must adjust
bitplane pointers in decide_plane() also. Make plfstrt the earlier a
position in this case, and adjust bitplane pointers/modulos
accordingly.
current_hpos() isn't what GCC calls a constant function.
Replace line_drawinfo[current_change_set] with new variable
curr_drawinfo throughout. Likewise for new variables prev_drawinfo,
{curr,prev}_{color_{change,table}s,sprite_positions}; all initialized
in init_drawing_frame (). Turn line_data into a 2dim. array, do some
CSE/SR on line_data[lineno] in pfield_doline_{l,h}() and
decide_plane(). Make some custom registers unsigned int instead of
UWORD.
calc_copcomp_true(): Masking with 0xF000 isn't likely to give 0xC0000.
Comment out bplcon{3,4} from struct decision.
970112 filesys.c, action_set_protect(): if __unix is defined, check whether
user wants to change directory protection, and if so, force rwx to be
the new protection.
Force sane window sizes in xwin.c, and set width/height from mode specs
in svga.c.
Implement LORES_HACK compile-time option.
Whee, there _are_ broken programs that enable bitplane DMA in the
middle of the data fetch area, draw half a picture on the first line
and the full picture on all subsequent lines. New function
post_decide_line(), called from BPLCON0() and DMACON() which tries to
detect this case and turns the decision from border to playfield if
necessary.
New arrays, sprvstart and sprvstop, calculated in SPRxPOS and SPRxCTL,
and used by do_sprites. Handle sprites with vstart == vstop correctly.
Sprite vpos comparisons are now done with <= , not ==.
_Now_ the X86-specific linetoscr routines do their masking correctly.
configure: If we have GCC, #define GCCCONSTFUNC as __attribute__
((const))
970111 Eliminate can_draw from struct decision.
Change vertical DIW code; use enum of two states (waiting for start and
for stop) which is updated in decide_line(). Lines during the wait for
stop phase are decided as border. No data is fetched outside the
vertical DIW.
Optimize copper memory cycle calculation a little: the new variable
copper_cycle_time is set to a time >= 0 if this time is constant
(i.e. 2). Calculated whenever DMA, BPLCON0, or DIW state changes.
blitter.c, genblitter.c, custom.c: For BLTBDAT, follow the HRM which
says that immediate data is shifted as soon as it is written. This
seems to be wrong for the A channel, though. Also, don't change prevb
during blitter loops if DMA B is off (Sanity Arte). Turn FAST_BLITTER
stuff into run-time option "-n", and eliminate the ancient blitting
code (former FAST_BLITTER == 0).
Big OOPS: Copper move checked copcon, but there was no COPCON function
so it was always zero -> copper-controlled blitter never worked. As a
speed optimization, recognize 00010000 copper commands and put the
copper to sleep until the blit is finished.
Slow down the blitter in decide_line() if bitplane DMA steals blitter/
copper/CPU cycles (but this code is commented out for now).
970110 New function pfield_init_linetoscr(). Move calculation of diw_end and
diw_start values there from x86-specific code. Also use DDF values to
determine where data in pixdata.apixels is valid. The x86-specific
linetoscr routines now only do the alignment masking (and they now do
it correctly, too).
Got rid of the display-related contents of struct draw_info, make
static variables and them initialize from pfield_draw_line() only when
necessary in function pfield_expand_dp_bplcon (). Get rid of the four
saved_* arrays, remember line_drawinfo instead now that it's smaller.
Color compare avoidance didn't work because color_src_match didn't get
set when a compare was successful. Fixed.
Reorder parts of the decision-making code so that less redundant checks
are performed.
Add clever x centering. Change "-O" option parameter format.
In md-i386-linux/support.c, memcmpy(), do memcmp() first, then switch
to a plain memcpy routine once we find the first difference.
Patches from Stefan Reinauer/Christian Schmitt for
xdebug.c/configure.in
New uae-ui.tk from Volker Zota.
Add --enable-profiling to configure.in.
Check for period==0 in AUDxPER() was accidentally commented out -
revert.
970109 Some tweaks in X86.S, plus a new option X86_PPRO_OPT to use movzbl
instead of xorl/movb when possible.
Fix maxline calculation in finish_drawing_frame().
Make next_lineno always a valid array index. Decrease minfirstline to
21 (NTSC vblank end). New option -O to specify display parameters,
supersedes -d and -C which will be removed eventually. Differentiate
between line doubling and aspect correction. Put aspect correction code
in custom.c.
Remove some more unused stuff from custom.c.
Fix Makefile problems when cpuopti isn't used.
970108 use_lores isn't initialized before custom_init(), setup lores_frame and
friends in customreset(). Optimize spixstate clearing. Optimize border
drawing with copper color changes (use fill_line instead of linetoscr)
Fix the sprite DMA logic, it now works with the Interference demo.
Silly bug: Sprite 7 never got displayed (introduced sometime last week)
Implement USER_PROGRAMS_BEHAVE for normal (non-compiler) CPU emulation.
Add most of Gustavo's last patch (new dir md-i386-dos)
970107 Finish rewriting most of the drawing code in custom.c/X86.S. See
README.PROGRAMMERS and source for details. Improvements include better
copper precision, better interlace support, hopefully much less bugs
and not too many new ones.
Remove calc_adjustment() and gfxvidinfo.x_adjust; replace with code in
custom.c that looks at gfxvidinfo.follow_diwstop (new field)
Some operations (like EHB playfields) now have a higher penalty than
before, the assumption being that these are rare and the normal case
runs faster if it doesn't have to care too much about exceptions.
Fix sign mismatch bug in BPL1MOD() and BPL2MOD().
970104 Move x_ShowEA() from xdebug.c in newcpu.c, rename as ShowEA().
970102 Add check for XK_W to decode_es() in xwin.c.
New uae-ui.tk from Volker Zota.
961218 Add a patch by Bernie Solomon to overcome a problem with K&R compilers.
Change X86.S in a way that may make it either faster or slower.
Fix ADF_EXT1.
961217 #ifdef XK_dead_*, since Solaris doesn't have it.
961202 Fixed joystick.h problem in configure. X11/DGA support from Kai
Kollmorgen.
961117 Some fixes in svgancui.c.
961112 Gustavo's latest patch, with GUS support for DOS by Michael Sontheimer.
Add menu browsing to tui.c/svgancui.c
961107 Fix m68k_areg and m68k_dreg macros (put args in parentheses)
Initialize gfxvidinfo.maxlinetoscr in xwin.c (found by Sam Devulder)
961104 svgancui.c tui_refresh() routine tweaked to work with the non-standard
ncurses that came with my new SuSE-Linux CD.
961031 Added Christian Schmitt's xdebug.c (disabled for this release)
961024 Module search function from Michael Krause.
961019 Add Samuel Devulder's Amiga patches.
961018 Don't use -lm on NeXTStep.
961017 configure checks for -lforms.
961016 Ian Stephenson's new NeXTwin.m. Make CLXDAT return 0 (no collisions)
transdisk and transrom patches from Rodney Hester. Don't warn about
256K Kickstarts. Check diskfile sizes and try to determine whether it's
a normal or a HD diskfile. No HD drive identification yet (is it
different?)
961013 Corrected lots of bugs in the return address stack. Fix some errors in
the compiler memory management. Use the "locked" flag for hash entries
differently, and don't enforce it on a cache flush. Compile JMP to a
constant address.
961012 Remove regs from cache before sign extending them for ADDA, MOVEA and
similar things. Compile NOPs to nothing. Implement variable shifts/
rotates. Most shifts clear the V flag: Handle this in the compiler by
some extra magic sequences after shifts or in the CC_AFTER_RO case in
flush_cc_cache().
Implement a stack containing return addresses and their hash entries,
and compile JSR (to constant addresses)/BSR/RTS instructions inline.
961011 compiler.c: Several bugs introduced in the last two days fixed.
New function compile_note_modify() which is used when an ea is
modified. This replaces calls to storeea with eaino_s == eaino_d.
Bah, the 386 doesn't set flags on a NOT. Use CC_TEST_REG again.
Do flag life analysis until no more changes are found.
Make sure all "data" parts of EAs are locked exclusively (esp. for
LEA, PEA)
961010 compiler.c: Finish yesterdays changes. Get rid of reg/offset
bookkeeping in m68k_compile_block(), keep the information in struct
ea_info instead. Rewrite all instructions to use the new fetch and
store routines.
Don't force a byteorder conversion in sync_reg() if the reg doesn't need
to be written back. Don't do a SAHF or equivalent in compile_condbranch
if we are doing a BRA or BF.
Don't use CC_TEST_REG for NEG and NOT (this was inefficient for NOT and
wrong for NEG).
961009 compiler.c: Two types of locks for registers; shared and exclusive.
Implement better EA fetching and storing routines. For pdi addressing
modes, lock the necessary registers shared before calling prepareea.
Unlock those registers again in generate_possible_exit().
961008 MOVEM instructions in the compiler to an absolute address could have
caused random memory corruption.
961007 Spanish keyboard support for X by Ruben Martinez. Some configure fixes
(don't assume current dir is in path, don't assume ncurses.h exists if
libncurses does).
If we're calling 68k code from an emulator function, don't use compiled
code.
Add a compilation option USER_PROGRAMS_BEHAVE (for compiler). Make
compiler hash table larger.
961004 Fix typo in configure.in.
Modify the compiler so it doesn't ever throw away code, unless it's
necessary for a cache flush.
Didn't quite squash the compiler flag bug yesterday. Try again.
In filesys.c, do_find(), add a parameter fallback that indicates that
the open should be retried with O_RDONLY if it failed with O_RDWR.
Use this in find_input(). This fixes problems with r/o files on r/w
volumes.
961003 Play around with the x86 specific memory access functions. Problem:
__attribute__((regparam)) isn't reliable, and it seems that that's a
rather hard to fix bug in GCC. Add some alternatives to
md-i386-linux/memory.h; these aren't used yet though.
Huh, the compiler was completely wrong about the flag needs of
conditional instructions. I wonder how it could work at all...
Remove a and d arrays from struct regstruct; replace with array regs
with 16 elements. This allows better code for get_disp_ea()
961002 BeBox diffs from Christian Bauer. Move all code from main() to new
function real_main().
961001 Use do_get_mem_*() functions for nextiword(), nextilong() and new
function nextibyte().
960930 genblitter optimizations: Don't generate expressions in genblitter, use
a second program called gengenblitter to generate a table of
expressions for genblitter to use. gengenblitter knows about a lot of
rules to simplify expressions. Some other tweaks to make GCC output
better assembly for blitfunc.c.
960927 Turn off LED() in xwin.c (may fix SunOS joystick emulation problems)
Call XFlush() and XSync() when exiting.
Add some DOS patches.
Add hooks in filesys.c to support filesystem units in a GUI. Use them
in tui.c. Bugfixes in svgancui.c. Change the way tui_refresh() works.
New option "-A".
960925 For read-only filesystems (CD...), use O_RDONLY in action_find_input.
960923 Save options file even if rename fails.
Mirror address space every 16MB like we used to (got turned off by
accident).
Move some checks out of options.h into configure. Set up md-*
directories with machine-dependent stuff in them; configure creates
a link called machdep to the appropriate one.
960918 Solaris sound update from Manfred Thole.
960917 Add a timer.device replacement (buggy).
960916 Tristan Cavelier's french keyboard patch.
Apply ReadTheSpecsBeforeYouWrite(tm) technology to AddPort().
Implement RemPort(), GetCC().
960915 Tighten up some of the return values in Exec.
960914 EXEC: Implement RemTask(), ObtainSemaphoreList() and
ReleaseSemaphoreList(). Set up more fields of the ExecBase properly
and Enqueue it in the library list. Make InitResident call AddLibrary
when appropriate (otherwise, intuition is never put into the library
list). Fix major braino in Obtain/ReleaseSemaphore() (tried to Enqueue
tasks into two lists). Make OpenLibrary() honor the version parameter.
960913 EXEC: Idle task now runs in user mode (abuse 0xFF0D as second STOP
instruction). Make EXEC_IntTrap perform the RTE before trying to
schedule.
960912 Solaris sound didn't compile. So much for making blind changes without
being able to test them.
960911 As soon as you compile it under Solaris, it bombs... Now check that the
hardfile exists before determining the size in main.c.
execlib fixes: Set master DMA enable bit at startup, fix interrupt
code to survive an interrupt that occurs before the proper SetIntVector
call. Implement RawDoFmt(), CloseDevice(), CloseLibrary(),
FindResident().
960905 Lower 8 bits of POTGOR should be 0.
960904 Implement MULU, MULS, ADDX and SUBX in compiler.
960903 ncurses interface works. DOS people: please use the new portable tui.c
and turn dos-ui.c into a frontend for conio.h, similar to svgancui.c
In xui.c, unlink the temporary files ASAP.
Two new command-line options, "-o" and "-G".
Get rid of sz_unknown.
compiler.h, compiler.c: New files.
filesys.c, action_read(): Added a hack to test whether the first four
bytes read from a file a file contain 0x000003F3 (HUNK_HEADER), in
which case there's probably a LoadSeg() call going on and we ought to
flush the cache. Also, use the fact that memory is now linear.
960902 Struggle a bit with dos-ui.c, rename it to tui.c (text-based ui), add
new file svgancui.c (ncurses ui) and try to make these two understand
each other.
960829 New transdisk from Stefan Ropke (can write images)
Apply Patrick Hanevolds BeBox patches.
96082x many changes to Exec. Still not booting (DMACON seems not to be set up
properly, and sometimes Signal is called with task==0).
960821 Solaris sound from Manfred Thole.
960820 In filesys.c, get_fileinfo(), return volume name for top-level
directory.
960819 Reimplement WritePixel(). Layer locking is still missing.
960818 Reverse meaning of -x flag for X11. More Exec code.
Several changes to the main CPU loop and the way call traps work.
960817 Implement some simple Exec functions (Lists, AllocMem & friends)
960816 filesys.c fixes from David Varley.
960815 Implement graphics library region functions.
960814 Modify memory layout: All memory is linear now; get_real_address()
returns a (UBYTE *).
960810 Add Gustavo's latest DOS code.
In configure, include <sys/param.h> earlier for the sake of some *BSD.
Add three options for sound code (bits, frequency, buffer size).
Make -S option take a parameter; remove SPEED_UP_SIDMON_MODULES.
New version of transrom (return 0, duh).
960805 Fixed the blitter line mode emulation (this time, really! I hope.)
Thanks to Fabio Ciucci for a detailed description of the correct
behaviour.
960730 Spent the last three days trying to make the filesystem emulation
bootable by adding an expansion device for it. A fair bit of trial and
error, but now it works! Even the hardfile now works with Kick 1.3, but
you have to mount it manually after booting.
hardfile.c, filesys.c, expansion.c and autoconf.c now are an
entangled mess which badly needs to be cleaned up.
We can now mount more than one filesystem even with Kick 1.3: we
recognize them by param 2 of the startup packet, which has the same
value as the dn_Startup field of the devicenode.
Make Kickstart replacement work again (didn't like the CPU emulator
changes)
Include preliminary serial support from Stefan Reinauer.
960728 Fixed the scancodes for <> and #' keys in svga.c
Apparently, CIA timer latches ought to be 0xFFFF after a reset
(prevents Eagleplayer from crashing occasionally). #ifdeffed out a
slightly weird call to INTREQ from RethinkICRB()
960727 Sound code rewritten again. Now uses events (five new ones). All
modules seem to play correctly now. It's a bit slower, though.
AF sound should work again, patches from Marcus Sundberg.
960723 ... and more CPU emulation bugs fixed by Herman.
Added uae.library from Tauno Taipaleenmaki, plus support files in the
"amiga" directory.
Added some files for the XFree86/OS2 port from Krister Bergman.
Reorganized all the directories.
960717 Add latest patch from Herman.
More FAST_BLITTER options: 4 and 5. These finish the blit immediately.
960713 Call XAutoRepeatXXX() only if we know we want to change the state.
960709 Work around a few AIX bugs (ughhh... what a broken OS). New test for
sys/select.h.
In xui.c, don't try to communicate with a dead process.
960704 More bugfixes from Herman.
Get rid of dummy_xlate(), use default_xlate() to abort with error.
In svga.c, set correct_aspect to 0 if using lores.
Change the Bcc exception 3 handling code a bit.
Add new program "cpuopti" that takes gcc-generated assembly files and
optimizes away unnecessary pushl/popl instructions on the x86.
960701 68020 exception handling & various bugfixes from Herman ten Brugge.
In ersatz.c, use 0xFF0D instead of 0xF00D as trap opcode.
Do MMU "emulation" (no-op MMU instructions, probably many cases decoded
incorrectly).
960627 New file LIESMICH, with minimal German instructions. Somebody want to
translate the docs to French, Spanish, Italian, all the Scandinavian
languages, Hebrew, Polish, Dutch, Russian, Welsh, Gaelic and something
Joe_Luser@aol.com understands? (No offense meant - I'm sure there are
brillant minds using AOL. There must be.)
960626 In zfile.c, make sure we delete the temporary file even if file
decompression fails.
Reimplemented sound support, this time following the HRM closely. Seems
to work fine most of the time, but occasionally loses drum beats in
TFMX modules. do_sound() is now unconditional, it calls
flush_sound_buffer(), which is system-dependent. This breaks everything
except Linux sound for now :(
Add Herman ten Brugge's 68020/68881 emulation code.
FreeBSD chokes if sys/mount.h is included without sys/types.h. Fix the
configure script.
960622 More work on AGA code.
Removed 2-bit display routines from custom.c. Ian: please use dithering
code.
Make slowmem and chipmem sizes run-time configurable.
Mask out the high bits in BLT?PTH().
Add exception 3 checks to Bcc/BSR instructions. Seems to be not quite
correct yet.
Completely rewrote the disk emulation. We now create a big track buffer
full of MFM data, used in a cyclic fashion by DSKBYTR() and friends.
The current position in the buffer is determined by the cycle counter.
DMA reads are now done in one piece. Two new event types: ev_diskblk
and ev_diskindex.
ARRGGHH! The RSI demo has _completely_ broken disk loading routines.
They start disk DMA on a block while the blitter is still working on
the same memory region.
In zfile.c, unlink() the temporary file directly after opening it so
it will be freed by the OS as soon as we close it (or crash... :)
960621 Merge pfield_sprite_h() and pfield_sprite_l() into one function.
Split off new files blitter.c and blitter.h from custom.c.
Fixed null-pointer dereference in zfile.c when filename has no
extension.
Add new field maxline to gfxvidinfo that prevents writing past the
screen buffer if it has less lines than expected.
Modify the 256 color allocation routine to set nb_cols to the same
value first for r,g and b; allocate everything as usual and fill the
lost colors afterwards with those that have the greatest difference.
960620 For some extremely weird reason, it is faster to simply call the
assembly-optimized pfield_linetoscr_full routines _twice_ to double the
line than calling the new (also assembly-optimized)
pfield_linetoscr_full_double routines, at least when writing directly
into the framebuffer. If someone has a good theory why, let me know
about it.
Drawing into memory is faster with the _double routines, but not
noticeably (about 1%).
Consequence: Removed the new pfield_linetoscr_full_double assembly
routines again.
Add a "--disable-gui" option to configure.
Add Samuel Devulder's dithering code. Provide support for mono and
16 color X servers.
Put an assembly version of DitherLine() in X86.S.
New color mode (3) available, tells UAE to use 256 colors and dither
the image. This is meant for people who have only a 256 color X server
available, but it works with the SVGA version, too. It's much slower
than normal 256 color mode, though.
Use the color allocation algorithm from the dither code in
alloc_colors256(), too.
960619 New files: zfile.c and zfile.h, from Samuel Devulder. These provide
transparent decompression of various compressed file formats. Enabled
by configure only for Unix systems.
Eliminate dont_want_aspect. New option "-C", sets correct_aspect. Make
video mode 3 640x480, video mode 4 800x600. Honor correct_aspect in
320x400, 640x480 and 800x600 mode with SVGAlib.
Add fields maxlinetoscr and x_adjust to gfxvidinfo.
Rename pfield_slow_linetoscr() to pfield_do_linetoscr(). Use new fields
in gfxvidinfo to enable writing directly to the framebuffer in
resolutions with <800 horizontal pixels.
New function pfield_do_linetoscr_full(), called when sure that full
line update is being done.
Move some of the usage() information into some target_specific_usage()
functions, defined in the various system-specific files.
Support lower resolutions with LOW_BANDWIDTH, too.
memcpy() within screen memory is dog slow. Prevent some common cases:
1. Use fill_line() to double a line in the border.
2. Add a parameter to pfield_do_linetoscr_full() to indicate whether
the line has to be doubled. New functions
pfield_linetoscr_*_double_slow() that simply do a memcpy(), plus
optimized ones in X86.S that are much faster by avoiding the copy.
Smart update code could get confused by lores modes when
prev_max_diwstop changed from one frame to the next. New variable
frame_redraw_necessary, which acts as a counter. It's initialized to
2 in interlace mode to handle that case properly, too.
Move sprite priority checks into pfield_sprite_?(), move HAM
calculations into new function decode_ham6() to simplify the various
linetoscr functions.
Fixed a bug that would cause sprites to get deformed in some cases
when they overlapped (never seen it).
960618 New file: dos-snd.c, from Gustavo.
960617 Release 0.6.0
960617 Fix memory clobber in X86.S when diwfirstword==0. Eliminate double test
for HAVE_SYS_MOUNT_H in sysdeps.h.
960616 Handle programs that don't wait for the blitter by finishing a pending
blit as soon as a blitter register is written to (regardless of DMACON,
to be safe).
Call gui_led only if the LED changed.
960615 Fixed dual playfield sprite priorities. Optimized dual playfield code
in X86.S. More work on AGA code. Get joystick status only in
vsync_handler to speed things up.
Make blitter fill more intelligent with table lookups instead of loop.
960614 DOS update from Gustavo. Pass real bitplane pointer to
bpl_data_differs(), don't calculate it again.
960610 Fixed silly INTEL_FLAG_OPT bug: The new __asm__ expressions use
regflags, which is of course _regflags on a.out...
More BeBox fixes from Christian.
Make the CIA bank bigger (A0..BF) and relax the CIA A/B selection
checks to make broken software (Kingsoft's Emerald Mine, reportedly)
happy.
Default framerate is now 1.
960603 New BeBox code from Christian. Fix test for ELF in configure.in.
960529 genblitter.c: generate blitfunc as a function taking ULONGs and
returning an ULONG. This makes custom.o about 4500 bytes smaller on the
x86 by removing worthless size prefixes, and should increase
performance (better for the cache, and the P6 reportedly doesn't like
16 bit instructions anyway).
memory.c: Load Kickstart in one block and swap bytes after that if
necessary (eliminates the need for the special bebox load routine)
custom.c: Some preliminary work for AGA support.
960528 Saw a real awful piece of code that detects the right mouse button by
reading a value from POT0DAT, counting up to 25, reading from POT0DAT
again, and deciding the button is pressed if the value changed. Urgl!
Added POT0DAT() in custom.c ...
Gustavo's latest patches.
960525 Do index pulse handling in CIA_hsync_handler(). Make sure bit 12 in
INTREQ gets set on an index pulse. Don't call DISK_Index() for now,
since this breaks the Workbench.
The CIA code should _probably_ not be resetting the bits in INTREQ.
Disable this as an experiment, let's see what breaks.
960524 Z flag handling for ABCD/SBCD/ADDX/SUBX was wrong (must be clear if not
zero, was set if zero). Some other flag bugs in these functions fixed.
960523 gfxlib.c update from Christian Schmitt. Some new Mac code from Ernesto,
still not all of it, though. Italian keyboard from Alessandro Bissacco.
960522 Fix the CHK instruction. Implement middle mouse button.
960515 Fix some Nextstep problems in configure.in.
960513 New Makefile target "streifenfrei" to remove all output from configure.
Use autoconf 2.7; 2.9 is buggy.
960512 Remove BIG_ALIGNMENT hack. Remove superfluous pfield_fetchdata() call
in pfield_doline_slow_l() that resulted in garbage on the screen.
Move blttbl array from custom.h to genblitter.c
Use new lookup tables imm8_table and areg_byteinc in CPU emulation
instead of ?: expressions.
GCC appears to generate better code if the opcode is passed as ULONG to
the CPU emulation functions instead of as UWORD.
Modify some of the flag emulation __asm__ statements so that GCC uses
less registers for them.
960510 Cast malloc() results to char *, for C++ compilers.
960509 Use test for GCC and __i386__ in options.h to decide whether to use
intel flag optimization.
Use test for wish4.0 to decide whether to use the GUI.
960507 New bebox.cpp from Christian. AF sound patches from Marcus Sundberg.
960505 Fix the configuration stuff so it works. Fix some bugs in gfxlib.c
960504 Use GNU autoconf scripts to generate Makefile and sysconfig.h. Add new
files sysdeps.h that includes the right system header files. Remove
amiga.h and Makefile.
960502 More Next code from Ian (new Uae.app directory, 2 bit drawing for
custom.c).
960501 Allow the sound driver to set the frequency to a value that is slightly
different from the requested one.
960430 Added AmigaOS port from Olaf Barthel.
960427 Fixed single playfield sprite priorities in X86.S.
960426 Added new NeXTwin.m from Ian.
Turn off the blitter delay in line mode.
Added a CPU optimization from Olivier Raoul: gencpu now reads a file
"insncount" that can be generated by UAE during execution and generates
specific functions for the most common opcodes. Not documented yet.
960414 Reimplemented the fast disk emulation in a more sane way. Also it's
only done for reads now. (Plus, it no longer works :-/ Need to work
some more on this).
In blitter emulation, defer not only the setting of the bltfinish bit,
but actually defer the whole blit for the number of cycles it will
take. This makes programs the clear the screen while it is still being
displayed look much better.
Changed supervisor mode handling around a bit (was messy).
New DOS code from Gustavo.
960412 Removed smart update method 2. Added Alessandro Bissacco's blitter
optimization patch.
Fixed some sprite problems: during hysnc, clear sprpos and sprctl, and
don't do_sprites() in line 0.
960409 Be a little more intelligent about when to call pfield_linetoscr() from
pfield_doline_slow(). It's only necessary if a color register changed.
If it can be deferred to the end of the line, use the the _full
variants.
Some CIA TOD fixes.
Better transdisk, accepts first/last track parameters.
960405 New function memcmpy(), inline assembler for the i386. Compares two
memory blocks and copies them at the same time. Used in
bpl_data_differs.
960404 French keyboard from Tristan Cavelier. Parallel port emulation from
Stefan Reinauer.
Turn bpl?pt and r_bpl?pt into arrays, simplify some code using them.
960401 Some parts of Ernesto's new Mac sources.
960331 filesys.c: Close filedescriptors in free_key(). get_path() sometimes
read uninitialized bytes.
Minor cleanups all over the place.
unchain_mnn() leaves sibling intact, but clobbers next. customreset()
didn't care about that and crashed.
Use the __asm__("intel_flag_lookup") magic not only for DOS.
Support 320x300 for X (without LOW_BANDWIDTH).
Add new function fast_memcmp(), defined as memcmp if __i386__ is
undefined, otherwise a slightly optimized inline assembly function.
960329 Some bug fixes in gencpu.c
960328 Stupid programs write odd playfield modulos into the hw registers...
Eek! Sometimes, linedescr[] was indexed with a negative value... Add a
vpos >= minfirstline check to pfield_may_need_update(). I really need
to rewrite this in Oberon...
Don't turn off SHM when LOW_BANDWIDTH is selected.
Keep the nextpos and linepos variables from pfield_doline_slow_?() as
globals and initialize them in pfield_may_need_udpate().
Modified alloc_colors256() some more.
Try to make sprite DMA follow the Amiga DMA slots more closely by
adding a currhp parameter to do_sprites() and calling it at the end
of a scanline or in pfield_may_need_update().
960327 Added Gustavo's latest DOS code, as far as possible. Modified X86.S to
use a macro SYM() to create symbol names either with underscore or
without.
Fixed some very silly SVGAlib lores bugs. Move screen 8 pixels up in
low resolution.
Use diwstop instead of diwstart to caclulate the DIW for 320x200 modes.
Reset it not only in calcdiw(), but also in init_frame().
Speed up 256 color allocation a little bit.
960326 New function flush_block() in xwin.c and svga.c. Called from
do_flush_line() and (new function) do_flush_screen(). Modify struct
vidbuf_description, new member maxblocklines that records the maximum
number of scanlines that do_flush_line() should collect before calling
flush_block(). If it is zero, then flush_line() is used as before.
This makes the special case stuff for SHM unnecessary, so it's removed.
Fixed a stupid bug in events code: Put ev_hsync in front of ev_copper,
so that do_copper gets called with hpos == 0 instead of hpos == 227 at
the beginning of the line.
New function init_frame() that sets up some variables, called from
customreset() and vsync_handler().
Move smart update code to pfield_doline() from pfield_doline_h() and
..._l(). Clean up these two with a macro DO_ONE_PLANE, removing
duplicate code.
Implement big blits and ECS chip ids. New configuration options
ECS_AGNUS and ECS_DENISE.
Implement MOVEP.
960325 Before calling pfield_may_need_update(), make sure the value that was
written to a register actually differs from the previous one.
New expansion code from Stefan Reinauer.
Modify struct mem_notify_node to contain a pointer to a valid bit
instead of the valid bit itself, so that the playfield code has to
check only one flag to decide whether to draw the line (SU method 2)
960324 The chip_flags approach has several problems. A flag may cover an area
in memory that spans two scanlines, or several scanlines may use the
same area in memory.
Provide two other, different methods for the smart update:
1. Save all the bitplane data for each line and compare the chipmem
with the saved data to decide whether an update is necessary.
2. Use a chain of memory_notify_node structs instead of a single bit
for flags. Each scanline owns a set of these structs and chains them
into the right place, and the chipmem_?put routines walk the chains
and set the modified bit for each element.
Unfortunately, both methods are slower than the old one. Especially the
first one has some advantages though: it speeds up programs that clear
the screen each update and write the same contents back, and it
can speed up double-buffering programs at full framerate, since it does
not have to check whether the bitplane pointers have changed.
Remember the first and last drawn line for each frame, and pass them to
flush_screen. Use this in xwin.c for SHM. Modify SHM logic: if smart
update is selected, call XShmPutImage() from flush_line() instead of
from flush_screen(). But gather blocks of consecutive lines to avoid
calling XShmPutImage() too often.
960323 "Smart update" method, based very loosely on Alessandro Bissacco's
work, implemented:
Add an array chip_flags that records any change made to specific words
in chip memory.
Move all the hardware registers relevant to playfield display into a
new structure bplinfo. Remember the contents of this structure in
struct line_description for every line on the screen. Avoid redrawing
in pfield_doline if the screen memory has not been modified for the
line to be drawn and if the information from the last frame matches
that in the current frame.
960322 Duplicate all functions responsible for drawing (pfield_doline,
pfield_doline_slow, pfield_sprite, pfield_*word_*res) and append _h
or _l (ah, the golden C++ days, when we had templates... which never
worked). Modify the *_l functions to support drawing in low resolution
(i.e. 320x200). Change the options -d and -H to support selecting color
mode and resolution, thereby getting rid of some SVGALIB_* options.
Get rid of the old pfield_*word_*res functions.
Collect information about the minimum diwstart value during the
previous frame and use that in case 320x200 was selected to fit the
image on the screen.
Get rid of HAVE_JOYSTICK (breaks the "-J" option)
960321 Give up in op_illg() if opcode is 0x4e7b and the exception handler for
it is NULL. In that case, it's a 68020 Kickstart.
960319 New Next code from Ian. SunOS target was still screwed (two CFLAGS).
Turn -x option into a "hair cursor" option. Support multiple mounts,
but warn if more than one is seen (still does not work with Kick 1.3).
Integrated Samuel Devulder's new LOW_BANDWIDTH patch.
960318 Integrated the start of Markus Gietzen's gfx library replacement.
Changed the interface between custom.c and the graphics code. There has
to be a buffer holding the data of all the lines on the screen. For
linear SVGAlib modes, this is the video memory. Eliminated -x option,
prepare_line(), DrawPixel() and the X_?BIT_SCREEN options, replace with
3 versions of pfield_linetoscr for different datatypes. Implement
proper handling of the borders above and below the DIW in custom.c
instead of in flush_screen().
Move common code (color allocation) from all the graphics files to new
file gfxutil.c.
Swedish keyboard from Per Olofsson.
960315 Release 0.5.0
960315 Newest DOS port from Gustavo. New sgi-gcc target.
960314 Add -lXext to osf target. Use "rb" for fopen() in main.c
960310 Play a bit with the __asm__ constraints. Implement CHK.
960307 Fix some stupid Makefile errors. Call parse_cmdline() if no init file
is found.
First round of NextStep patches; new file NeXTwin.m
Stupid bug in custom.c: The #define is called NO_FAST_DISK, not
NO_FAST_FLOPPY.
Fix one of the problems the Deform demo had with the blitter: The
line texture wasn't rotated to the right position in blitter_init().
960306 Use some black GCC __asm__ magic to calculate flags more quickly
(config INTEL_FLAG_OPT)
HAM was broken by pfield_linetoscr changes. Fixed.
LOW_BANDWIDTH sometimes got confused when the display window changed.
960305 BCD instructions work well enough for Locomotive Basic on CPE.
New function parse_cmdline_and_init_file() that reads ~/.uaerc or
./.uaerc and adds the options found in those files to those in argv[].
Patch from Denis Sablic to make disk image filenames runtime
configurable. Extend it for the ROM filename.
Remove some of the run-time configurable stuff from config.h.
More X keysym fixes (I finally got a proper .Xmodmap ...)
for SVGAlib: Delete key, and PgUp/PgDn as Amiga keys.
The sound driver can now handle 22050 Hz and/or 8 bit samples. Both of
these are the default with LINUX_SOUND_SLOW_MACHINE.
Also use the SNDCTL_DSP_GETBLKSIZE ioctl and write the buffer when
there is enough data.
Abuse keybuf.c to provide a fake joystick emulation with the numeric
pad (enable with -J)
960304 bebox.cpp from Christian.
Rename pfield_linetoscr_full to pfield_linetoscr_full8.
More x86 assembly: pfield_linetoscr_full16.
960303 SunOS target from Dirk Vangestel. Put some not-so-superfluous includes
back in. Added the DOS specific patches to filesys.c.
Started x86 assembly optimizations. New file X86.S, includes an
optimized version of pfield_linetoscr (for 8 bit screens only).
Don't use SA_RESTART if it isn't defined.
prepare_line() wasn't called often enough (again...), leading to memory
corruption and "hit the reset button" bugs when using SVGAlib.
960226 Get rid of bool, true and false in amiga.h and everywhere else.
Copy yesterdays code to AF_SOUND code, too.
Include first round of Christian Bauer's BeBox patches. Add AIX fix
from Samuel Mackrill.
Add #include <string.h> and #include <stdlib.h> in some more places.
Modify gencpu.c and readcpu.c so that immediate types j and J (0..15
and 1..8) can be merged. Replace HAVE_ONE_GIG... option with a new
CPU_EMU_SIZE option that can be set to a value in the range 0..5,
where 0 is minimum size and 5 is equivalent to HAVE_ONE_GIG...
960225 Remove multiplications in sound code, use a big lookup table.
960222 Go back to having only one memory bank table of type addrbank instead
of several function pointer arrays. Eliminate the HAVE_BROKEN_SOFTWARE
define by extending the memory bank table to 65536 entries.
Remove remaining DUALCPU code. Allow BTST src,imm instructions in
table68k.
960220 Back out filesys.c change from Stefan Reinauer: don't call V36 specific
functions in expansion.library.
Better fix for the filesys.c assign problems by Oliver Moehrke.
Make new playfield code conditional on EXPERIMENTAL_SCREEN_UPDATE.
Improve the 64bit variant of said code. Try to get alignment for
apixels by putting it into a union with a long.
Kill the child in gui_exit(). Make graphics_init() return a value and
check it in main.c to see whether graphics were initialized. If not,
call gui_exit() anyway.
Use new 256 color allocation routine from svga.c in xwin.c, too.
Make LOW_BANDWIDTH compile _and_ work (wow...).
960219 Fix bug in memory.c: When loading 256K Kickstart, copy 256K, not 128K.
960218 Finished the rest of the UI: reset, debug and quit buttons as well as
drive LEDs. New target linux-gui; all others use dummy file nogui.c
for now.
960217 The GUI now supports inserting and ejecting diskfiles and displays
their names. Two pipes are used now, one for reading and one for
writing. Properly wait for the process to start up.
Use sigaction() instead of signal() in debug.c.
More fixes for the new display routines: Need to do a final call to
pfield_*word_*res with the data shifted right from the last fetched
word.
960216 Copper & sprite bugfixes from Marco Nelissen. Better X keyboard support
from Bruno Coste.
Move my_strdup() from filesys.c to options.h
New files xui.c, uae-ui (shell script) and uae-ui.tk (wish script).
These create a GUI for the X version of the emulator. So far, the
power LED works.
960215 Don't rely on SVGAlib headers defining any keycodes at all.
Include Thorsten Frueauf's NetBSD patch. Apparently, the devname
variable in hardfile.c caused a namespace collision, so rename it to
uaedevname. Fastmem fixes, debugger help, and ConfigDev allocation in
hardfile and filesys from Stefan Reinauer.
xwin.c: Give the window a title.
Half-implemented the DIVU.L, DIVS.L, MULU.L and MULS.L instructions.
960213 AF sound system support from Marcus Sundberg. Win95 keyboard support
for SVGAlib from Thierry Lescot. Added most of Gustavo Goedert's MS-DOS
port.
When using the old pfield_*word_*res functions, the gen_pfield_tables()
function was undefined.
Hmmm, /dev/brain must have been unmounted when I wrote the new pfield_*
functions. Now they make sure they access the apixels array only with
addresses that are multiples of 16 bytes.
960212 Fix copy&paste bug in cia.c found by Marco Nelissen: Need to call
RethinkICRB() instead of RethinkICRA() for CIA B timers.
Added Stefan Reinauers autoconfig area/fastmem support. Added run-time
options for use_slow_mem and use_fast_mem.
Oops, the pfield_*word_*res() optimizations break completely on HPs and
Sparcs. Now use this optimization only if we are using GCC 2.7.
HPUX fixes in the Makefile. New target hpux-gcc.
The code for clearing the areas above and below the DIW was trying to
be a little too clever selecting the color. Just use the current
background color.
Added channel attachment to the sound code. Untested.
960211 Found some flag setting bugs in the rotate/shift instructions and in
addx/subx (which I thought I had already fixed) by reimplementing
DUALCPU mode to work with Ed's e68k.
Argh! The copper is completely disabled during DDF in Hires 4 bitplane
mode - so copper positions 0x30 and 0x34 are about 640 pixels apart.
The Kickstart uses FF39FFFE to wait for the end of line 256 instead of
FFDFFFFE as in all the other modes. This is implemented now, but
probably not 100% correct.
Added check whether SVGAlib doesn't support our mode.
If using GCC >= 2.7, define __attribute__((aligned(16))) as
BIG_ALIGNMENT in config.h. Use it for the apixels array to prevent
potential problems on the Alpha.
Tried to make the color selection routine produce better results in 256
color mode.
960210 readdisk didn't work at all for large files - fixed.
In pfield_doline(), clear the apixels array if playfield DMA is off.
In SPRxCTL(), reset sprite mode when sprpos==sprctl==0
Rewrite pfield_orword_hires() and friends to use lookup tables. No
noticeable improvement on my machine, but might be different on other
machines. Two versions of this code: one using 64bit longs on the Alpha.
New targets linux-debug and linux-prof.
Use 1MB slow mem.
-funroll-loops is a little excessive. Remove it.
Add support for linear addressing modes for SVGAlib version. Speedup
is 20-30% on my old 486 VLB. Now, would someone please fix SVGAlib to
support that for the S3-864 as well?
Set SVGAlib keyboard mode to DONT_CATCH_CTRLC.
Change custom.c, xwin.c and svga.c to keep track of the display window
and background color and to clear the areas above and below the display
window if necessary to remove garbage images from previous frames.
Set the LOF bit in the Kickstart replacement init routine. Also
initialize CIAs to Kick 1.3-like values.
960209 Some more -DHAVE_xxx_H options in the Makefile and filesys.c. DEC Alpha
fixes for filesys.c from Ed and Marcus. HPUX fixes.
New field in table68k for CPU type, parsed by readcpu and compared to
CPU_LEVEL which is defined in config.h. New instructions MOVE2C, MOVEC2
and CAS. Also a new field for priviledge level that is used by gencpu to
generate tests for regs.s and Exception(8) calls if necessary.
Move parsing of table68k into a new file build68k.c. Generate a file
called cpudefs.c containing the information from table68k in
machine-readable form. Change readcpu.c to use the array found in
cpudefs.c.
Don't generate the d8(An,Dn) addressing mode in-line. Generate a call to
get_disp_ea(), which is an inline function in newcpu.h if UAE is
configured for 68000 emulation; for 68020 emulation, it is defined in
newcpu.c.
Debugger could crash on illegals because there was no mnemonic defined
in lookuptab[].
Return zero for SERDATR.
960207 It seems that the copper stops completely if an attempt to write to a
specific register fails because of COPDANG. Apparently, the Kickstarts
use this to stop the copper with a 0x00000000 longword. This leaves the
question why they don't do 0xFFFFFFFE like everybody else.
Enable 512K slow memory by default.
Integrate Stefan Reinauers battclock patch that makes it work with
newer Kickstarts.
In cia.c, do the little index pulse hack even if dskdmaen==1, because
DMA is only enabled when dskdmaen==2 (Helps the "Mad Decision" demo).
Add solaris entry to Makefile (GCC, Openwin, -DHAVE_STATFS_H)
Define HAVE_STRINGS_H for SGIs, change filesys.c accordingly.
960206 Build a smaller table instead of cputbl.c. Use readcpu and the smaller
table to build the cpufunctbl array at run-time.
Nuked the other half of the old CPU emulator. Reimplemented debugger to
use the information generated by readcpu.
Define HAVE_STATFS_H for SGIs in the Makefile, and use that as a test
in filesys.c instead of #ifndef __linux.
Hack filesys.c, get_path() to support the assign command.
Add -fstrength-reduce and -funroll-loops in Makefile to make people
nervous.
Rewrite Sam Devulder's LOW_BANDWIDTH patch and add it to xwin.c.
960205 Forgot some PC-relative bit instructions in table68k.
Nuked half of the old CPU emulator.
Split gencpu.c into two parts, new one is called readcpu.c and just
parses the table68k file. Link it to the main program.
960205 Release 0.4
960203 filesys.c, action_read(): Slightly more efficient code (translate Amiga
address to real pointer).
Moved some common code in the generate_* functions in gencpu.c to a
separate function.
960202 Added an experimental fast disk option. Currently turned off by
default (it's not such a big win).
Attached sprite fixes (overlapping att. sprites looked bad, Katakis).
Add sleep(1) before resetting the console to text mode when using
SVGAlib: this might fix some screen corruption problems.
Add sprite/playfield priority checking to the most important case
(single playfield, no HAM).
In filesys.c, do_find(): open() returns -1 on error, not zero.
Return ERROR_OBJECT_WRONG_TYPE if do_find() is called for a directory
(fixes Champions of Krynn harddisk installation).
960201 Don't abort if sound driver not present, just set produce_sound to 0.
New files keybuf.c and keybuf.h to record keypresses in the right
order and without losing any. In cia.c, force 15 scanlines between
keypresses, just to be sure.
unixfs.device _does_ work with Kick 1.3: just don't trust what Kick 1.3
sends in the startup packet. For now, disable more than one mount per
command line.
Started integrating Ernesto's new Mac sources.
Remove superfluous includes from some files.
960131 Added Ed's unixfs.device (great stuff).
Adding ULONGs to pointers is a bad idea on the Alpha if the ULONG value
really is signed. Add some casts to LONG in (pc_p + src) expressions
in genpu.c.
If DMACON is written and copper DMA is enabled, do a COPJMP1 at once.
Helps the "Interference" demo.
960129 More SGI fixes from Ed. Bugfixes and transdisk improvements from Marcus
Sundberg.
Remove EXTRA_DEFINES from Makefile. Breaks some systems.
Move common sprite code from pfield_doline() and pfield_doline_slow()
to new function pfield_sprite(). The same sprite may appear more than
once on the same line, so don't shift out the bits of sprdata[] and
sprdatb[] while displaying it (Turrican I).
In xwin.c and svga.c, barf if LINUX_SVGALIB doesn't match the file
being compiled.
Make all .o files depend on config.h in the Makefile.
No need to exit if sound driver unavailable, but -S given.
Small debugger fix: Missing space in output.
Fix for the sprite logic: Specifically, use a state variable indicating
whether the sprite has been restarted after a VSYNC. Fixes most
Turrican problems.
960124 Added Denis Sablic's patch for sound run-time option.
Added Ed Hanway's patch for better Makefile, X mouse cursor blanking
and more SGI compilation fixes.
960123 Include options.h everywhere.
Handle 8 bit GrayScale visuals like PseudoColor.
Remove C++ leftovers from joystick code.
960122 When using the joystick driver, the button test must come after
handle_events() in vsync_handler().
960118 Removed all the remaining C++ comments. Changed all inline keywords to
__inline__. Define __inline__ if not using gcc.
Make proper prototypes for everything. Compile with maximum warnings +
-ansi + -pedantic.
Remove CIA_cycle(), obsolete.
Reimplemented the STOP optimization in newcpu.c. Removed DualCPU
support in CPU emulator.
Real nasty bug in pfield_doline() fixed: sprxpos could be evaluated as
negative, with not-so-amusing results. (Need to rewrite this in
Oberon to get array bounds checking :-)
960117 Heroic effort: Rewrote the thing in C. This might help fix some
problems with users being unable to compile it.
Fixed a problem in hsync_handler(): Only call flush_line() for lines
in the display window, i.e. when we did a prepare_line() before.
Better code for relative branches: Don't use setpc(getpc()+x) calls,
increment regs.pc_p instead.
960116 Reimplemented the function to load the Kickstart ROM. Use stdio instead
of fstreams since this apparently does not work on the Mac. Detect 256K
Kickstarts. Detect corrupt ROM images (calculate checksum).
Added Ernesto Corvi's Mac port. Changed it around a bit, so it
probably won't compile.
960115 Reinstate config.h options for X screen depth, so that DrawPixel() can
be inlined in custom.cc for speed. xlinebuffer is now incremented in
each call to DrawPixel() (for both X and SVGAlib) to get rid of some
address calculations.
960114 Fixed X generic pixel drawing routine for SHM.
Still trying to fix the harddisk emulation.
uae.device no longer breaks the debugger (can step through uae.device
functions now)
Bugs affecting performance: SPCFLAG_STOP never got reset, and DSKLEN()
would set SPCFLAG_DISK even if DMA was being turned off.
Made slow memory a run-time option.
Defer interrupts by one CPU instruction to give programs a chance to
read INTREQR ("Seeing is Believing" and "Substance" demos)
Added ScrollLock hack for X, too.
960113 SVGAlib version compiles again. Fixed SVGAlib mouse bug.
Fixed SHM bug: Maximum scanline is 313, not 312.
Sometimes, disk.cc missed a side change and would read the wrong data.
Fixed. Apparently, this was the worst compatibility problem.
Implemented trace mode.
960112 Changed layout of class amigamemory a little so that gcc can generate
better addressing modes.
Finally wrote functions in gencpu to generate MOVEMs.
960109 Integrated Ed Hanway's patches for better X support and run-time
configuration of some options.
Got rid of the direct VGA memory access. (Need to do this differently).
Changed the method of drawing lines: custom.cc now tells the graphics
code the line number and whether it needs to be doubleed before drawing
it.
Added Andre Beck's MIT-SHM patch.
Remove warnings for newcpu.cc.
960108 Fixed exceptions in op_illg(): Need to decrement PC.
960107 Added an "uae.device" resident module at 0xF00000. This emulates a hard
disk (fixed size 8MB for now).
960106 Moved some common code from pfield_doline() and pfield_doline_slow() to
a separate function. This fixes a potential HAM bug (two static vars
for the same value).
Sound support for Linux. Works only with graphics off and the CPU
slowed down.
Better SVGAlib keyboard support.
960105 Added AvailMem(), AllocMem(), AllocAbs() and FreeMem() dummies.
The Hardwired demo times the multiplication instructions and prints
"This demo don't like Axel" if they are too fast. Apparently, Axel has
a 68040. Added a WANT_SLOW_MULTIPLY option to config.h.
Fixed the fast blitter emulation (seems to work now).
960104 Fixed all the ChangeLog entries from 95 that said 96 (oops??!)
pfield_may_need_update() should check whether bitplane DMA is on.
Added ersatz.cc and ersatz.h. The purpose of these files is to
implement one or two Kickstart functions that are commonly called from
bootblocks. This should help support some games and demos that only use
the Kickstart as an initial track loader. So far, it's only good enough
for one program.
951223 More intelligent event handling in the CPU emulator. Slightly faster.
951222 Optimize CPU emulation by inlining cctrue(). Also, the real PC no
longer needs to be incremented each instruction. The real PC value
now has to be fetched by m68k_getpc().
Added direct screen access for SVGAlib, but it didn't help much. I'll
probably remove it again.
The gencpu executable is 2M smaller if it allocates memory
dynamically.
951216 custom_bput() enhanced a little. Now remembers the value that was
written in the other half of the register.
Apparently, the USEx bits of BLTCON0 are ignored in line draw mode.
(Silents-Demo)
951212 Release 0.3
951212 Included Alessandro's battclock patch.
Fixed mouse autocalibration for wrong-aspect screens.
951210 Joystick support for Linux.
Better color matching for 256 color modes.
Rewrote most of the memory management in plain C, mainly to avoid the
various template bugs in some compilers, but also because gcc can't
handle the regparm attribute for virtual functions yet.
951209 Added Alessandro's patches for automatic mouse calibration.
Tried to optimize the blitter loop a bit. Doesn't work.
951205 Added Hannu's patches for diskfile write support.
951201 More portability fixes, especially for weird compilers that workstation
vendors ship.
951125 More keys for X, some keyboard support for SVGAlib (slightly
dangerous); beginnings of US keyboard support.
951124 256 color mode support for SVGAlib. FAST!
951123 Tiny tweak to central loops in playfield code results in much better
assembly. Apparently, GCC does not feel too good about optimizing
reference variables.
951113 Bug fix in the events code (nextevent must not be changed while events
are being processed).
951112 The playfield can now be drawn with the right aspect (i.e., every line
twice). Slower, but looks nicer and supports interlaced mode
(flickerfree!). The first 29 lines (blanking interval) are omitted
now to fit everything in 800x600.
Oops, disk drive identification did not work. Fixed, all four drives
appear now.
Oops, CIA_reset() was there all the time but never got called.
Optimized the planar->chunky conversion in pfield_doline() a little.
This really is time critical.
951111 If colors change on a line, we might still be able to use the full
line update, if the change occurred outside the DIW. Have to be a
little careful, though.
Playfield code now uses real pointers again, but makes sure it can
read enough bytes to complete the current line without segfaulting.
Oops, my "better estimate" (see below) was a mistake. Restored the
original 4 hw cycles per instruction relation. This slows down the
emulator while booting (more screen refreshs), but speeds up many
demos that otherwise spend most of their time waiting for a specific
raster position.
Playfield modulos must be added immediately when DDF stops. (WOC demo)
Portability fixes in disk.cc (null pointers).
Implemented average frame rate calculation ('c' in the debugger).
Debugger fixes.
Sprite fixes (height was wrong, wrong priorities in fast update)
Added an AutoConfig expansion RAM device. The OS seems to recognize
it, but breaks sometime later (seems to be the same bug that kills
the emulator when there's RAM at 0xC00000).
SVGAlib now has mouse support, too.
HAM mode implemented.
951110 Implemented fast complete line playfield update. Switches back if
necessary. Fixed attached sprites bug.
Copper wait no longer slows down the CPU emulation. (there were
lots of new copper bugs because of this, but I hope I fixed all
of them).
Changed cia?t? from UWORD to ULONG, since there were overflows in
the assertion (because of 65535+1 == 0).
951108 The DIVS remainder could have the wrong sign.
New HAVE_BROKEN_SOFTWARE define in config.h that makes the emulator
mask out the high byte of all addresses.
Wrote genblitter.cc and replaced the awful code in blitter_blit()
and blitter_line() with calls to the generated function.
951107 Implemented ?BCD. These don't really work yet.
951106 Release 0.2
951105 Fixed a bug in the new CIA timer code.
Fixed flag settings for some cases of ADDX/SUBX
951104 Changed the main loop a bit - call all the *cycle() functions only if
it is really necessary. I hope everything still works - at least it is
twice as fast now :-D
Improved mouse emulation - avoid overflows, permit "wraparound".
Added debugger 'g' command.
Removed some useless casts from the CPU emulator.
Added a configuration option to prevent checks for odd addresses. Only
very bad programs need this check.
951103 The sprite emulation sometimes did not work too well, especially with
dual playfield mode. Hopefully fixed.
951102 The 10 cycle counter is more like a 5 cycle counter in this
implementation. (Fine, that makes floppy loading even faster :-)
Implemented mouse movement. Totally out of sync with the X pointer,
but at least something.
Found out about the XAutoRepeatOff() function. Real useful.
DualCPU mode works again.
Corrected flag settings for CMPA.W.
Fixed DIV instructions: Don't change dest in case of overflow.
951031 The PC is now converted to a real pointer. This is safe (much safer
than converting bitplane pointers, since the PC always has to be valid)
and should speed things up a little.
951029 Some primitive event handling: 2 mouse buttons and 1 joystick button
are emulated, as well as parts of the keyboard (only german mapping).
Fixes: Delay values and sprite widths are always LoRes. Playfield 2
uses colors 9..15.
Implemented a frame rate configuration option that can speed up the
emulation quite a bit.
951028 A-ha. The 68000 has one strange feature after all. MOVEM.W to Dn sign
extends the value to a longword.
Katakis expects that accessing odd addresses causes exception 3, so
we have to emulate this. *Sigh*
Do at least something with the index pulse bit. It's more or less a
toggle now.
Implemented sprites & dual playfields, both with small glitches.
951027 When LOF is set, the frame is one line longer.
951026 Implemented a preliminary diskfile type for special formats. Turrican
boots up correctly (crashes if I want to play a game, though).
Implemented EHB and added a few missing masking operations in the color
handling.
Fixed the absw addressing mode - need to sign extend here as well.
951025 Fixed another extremely stupid bug, this time in the playfield code.
Each pixel was calculated four times...
Increased the size of the apixels array - this was being overrun.
951024 Fixed an extremely stupid bug in flag settings for byte and word
operations.
The "sectors until gap" field must be in the range 1..11 instead of
0..10, or very bad things will happen if it is used to calculate a
blit size.
951021 Don't use real pointers to fetch bitplane data - too many segfaults.
Delay the copper after executing an instruction, or wait sequences like
FFDF FFFE 0200 FFFE won't work.
Some programs expect that the CPU is completely turned off if the
blitter nasty bit is set. So be it.
The RSI Megademo chokes when disk DMA fetches two syncs. Leave one out.
The LOF bit wasn't set correctly.
951020 Blitter fixes: Load fill carry from FCI each line; keep the masked
value of bltadat in bltolda
Give the CPU twice as many "cycles" - this still is not even remotely
correct, but a better estimate.
951017 Added SVGAlib support. Unfortunately, my graphics card isn't fully
supported by the current SVGAlib version.
951015 More small optimizations to memory.h and custom.cc.
Added code for 256 color screens. The type of screen has to be
selected at compile time.
951014 Modified the memory management to be (hopefully) a little more
efficient.
Changed gencpu.cc to generate functions and a big function pointer
array instead of the old case labels. The generated C++ files now
compile a lot faster, and the code should be better as well.
951013 Implemented pseudo POTGOR to keep the RMB from being detected as
pressed all the time.
GenerateDecTab() generated TRAP incorrectly.
Made some more instructions (MOVE.B A0,D0 etc) illegal in gencpu.cc.
Fixed X colors. Fixed data fetching for HiRes screens.
951011 EXT.WL instructions set the flags.
Implemented second CPU emulator, plus "DualCPU" option. The new CPU
emulator is generated automatically from a file called table68k by
a program called gencpu.
951002 Removed version information from the file headers.
Removed some sillinesses in custom.cc.
DSKLEN bug fixed (mask out 0xC000).
Playfield code rewritten. Now supports horizontal scrolling. Implemented
some primitive color support.
950927 Fixed predecrement/postincrement addressing with byte size for the
stack pointer.
950926 Fixes to the disk code: Terminate disk DMA, flip disk side, read more
than just two sectors during disk DMA, fix checksum calculation.
Fixed copper comparison bugs.
950901 Release 0.1
950826 bugfix in GenerateDecTab(): LEA.W instructions were generated.
950312 New file disk.cc, for (guess what) disk support. Doesn't work yet.
950311 Multiplication instructions were generating 16 bit results.
Sign extension was wrong in some places.
Removed bugs in the blitter (one word width: ALWM & AFWM and line mode)
The Kickstart logo looks perfect now.
Playfield routine should check BPLCON0 instead of BLTCON0
950309 ASR D8,D0 is not a valid instruction.
Bitplane pointers were not incremented.
Copper comparison didn't work. COP2LC and bitplane pointers were written
incorrectly. Fixed.
Something that bears a striking resemblance to the familiar Kickstart
logo now appears in my X window!
950306 ROR used to set the X flag. Bug fixes in GenerateDecTab.
More bug fixes in several 68000 instructions.
Improved blitter. ?????? KS1.3 doesn't seem to set BLTDMOD on a
line draw. What is this??
Fixed stupid bugs in playfield code.
950305 fixed bugs in opcode generation and interrupt handling. Implemented
STOP. Fixed flag settings: Result wasn't masked. Ooops!!
ADDQ #imm,An doesn't set flags.
One-shot timer mode didn't work.
Implemented blitter, doesn't work.
Some primitive and slow playfield support, only to make the things that
hopefully will soon appear visible.
950304 CIA timers ought to work OK. Copper is emulated.
Emulator loops infinitely when trying to initialize the console.device
950303 experiments with X, figured out how to open a window and draw pixels.
No graphics emulation yet, though.
950301 Nearly all instructions work.
Fixed supervisor mode stack.
The memory manager now handles CIA chips.
950228 Bug fixes in 68000 code, exceptions and more instructions implemented
Memory management extended to handle custom chips as well.
Debugger improved.
Kickstart passes memory & CPU type test, builds up some system
structures.
950227 MC68000 & little debugger for tracing. It can execute the first couple
of KS1.3 instructions, but doesn't get past the memory test.
950225 Work begun